package it.uniroma2.orchestrator.workflow;

import java.util.Vector;

import it.uniroma2.orchestrator.Servizio;

public class Nodo {
	
	private Servizio servizio;
	private Vector<Nodo> nodiPrecedenti;
	private Vector<Nodo> nodiSuccessivi;
	private int punteggio;
	private boolean dummy;
	
	public Nodo(Servizio servizio, boolean dummy){
		this.servizio = servizio;
		this.nodiPrecedenti = new Vector<Nodo>();
		this.nodiSuccessivi = new Vector<Nodo>();
		this.punteggio = 0;
		this.dummy = dummy;
	}
	
	public String toString(){
		return servizio.getNome();
	}
	
	public void aggiungiNodoPrecedente(Nodo nodo){
		this.nodiPrecedenti.add(nodo);
	}
	
	public void aggiungiNodoSuccessivo(Nodo nodo){
		this.nodiSuccessivi.add(nodo);
	}
	
	public void costruisciWorkflow(){
		
	}
	
	public void aggiungiPunteggio(int punteggio){
		this.punteggio = this.punteggio + punteggio;
	}
	
	public boolean hasPreCondizione(){
		if(servizio.hasPreCondizione()) return true;
		return false;
	}
	
	public boolean hasPostCondizione(){
		if(servizio.hasPostCondizione()) return true;
		return false;
	}
	
	public Servizio getServizio(){
		return servizio;
	}
	
	public boolean isDummy(){
		if(dummy) return true;
		return false;
	}
	
	public boolean isEmptyPre(){
		if(this.nodiPrecedenti.isEmpty()) return true;
		return false;
	}
	
	public boolean isEmptyPost(){
		if(this.nodiSuccessivi.isEmpty()) return true;
		return false;
	}
	
	public Nodo nodoSucc(int i){
		return this.nodiSuccessivi.elementAt(i);
	}
	
	public Nodo nodoPrec(){
		return this.nodiPrecedenti.firstElement();
	}
	
	public int numSucc(){
		return this.nodiSuccessivi.size();
	}
	
	public boolean equals(Object nodo){
		if(this.getServizio().getNome().compareTo(nodo.toString())==0) return true;
		return false;
	}
}
